#ifndef __IANGELS_NN_SEQUENTIAL_H__
#define __IANGELS_NN_SEQUENTIAL_H__

#include "nn/module.h"

#include <vector>
#include <memory>
#include <initializer_list>

namespace iangels {

namespace nn {

class SequentialAttributes: public Attributes {
}; // class ModuleAttributes

class Sequential: public Module {
public:
    Sequential(std::initializer_list<Module>& modules) {}
    ~Sequential() {}

    template <typename... TensorType>
    std::vector<OutputTensor...> operator()(std::vector<InputTensor>& inputs){
        std::vector<OutputTensor...> outputs = {};
        
        for (auto& module : modules_) {
            
        }
    }

private:
    std::vector<Module> modules_;

}; // class SequentialType

std::unique_ptr<Sequential> MakeSequential(std::initializer_list<Module> modules) {
    return std::make_unique<Sequential>(modules);
}

} // namespace nn

} // namespace iangels

#endif // __IANGELS_NN_SEQUENTIAL_H__